The hardware and software used to research the autonomous exploration and SLAM problems are a Turtlebot \cite{Turtlebot} and the Robot Operating System (ROS)\cite{Quigly09}, respectively. This section shortly describes both. In the end the layout of the solution to the autonomous exploration and SLAM problems is explained.

\subsection{Turtlebot}
A Turtlebot is a robot created by Willow Garage which has its own Software Development Kit based on ROS. 
This robot can have different features that help it in performing its tasks. In the case of our autonomous exploration and SLAM problem, the Turtlebot is equipped with two sensors.
The first and most important sensor is a laser range scanner. This sensor sends out an array of lasers in a specified angle interval. The laser scanner will measure the range along this entire interval and return an array containing the data. This data can then be accessed through ROS.
The second sensor is a Microsoft Kinect. 

In ROS, a package is provided that can simulate a Turtlebot in a virtual environment. This package is called Stage. However, the virtual data collected by the sensors in Stage is not equal to the real data collected by the real sensor of a Turtlebot. In fact, the odometry data in Stage is more accurate than for a real Turtlebot. Luckily, the laser range finder is more accurate in real world.

\subsection{Robot Operating System}
ROS is a framework that was designed to meet a specific set of goals. The main goal of ROS was to create a general framework for the implementation of robot applications for many different kinds of robots. These robots have varying hardware properties, which makes the implementation and code reuse different for each kind of robot.
The most important properties of ROS are given below. Together, these properties provide a broad development framework that can deal with many different scenarios.

	\begin{itemize}
		\item Peer-to-peer
		\item Tools-based
		\item Multi-Lingual
		\item Thin
		\item Free and Open-Source
	\end{itemize}

\subsubsection*{ROS structure}
In ROS, four concepts are fundamental, namely nodes, messages, topics and services.
A node is an individual process that can perform a task or calculation on its own. Many different nodes can be running at the same time.
These nodes can communicate with each other and share information that is needed for their individual tasks. 
This communication between nodes can be done by passing messages. These messages are data structures and can be primitive data types like integers or booleans, arrays of these primitive data types and structures made of different primitives. Messages can even be composed of other messages. Therefore, messages can be nested.
A message will need to be published by a node to a topic. This topic is simply a string that defines the subject of the topic. If a node wants to receive information from that topic, then the node can subscribe to this topic. That way, if a message is sent through that topic, the nodes that subscribed will receive them. At a given point, a topic can even have multiple publishers and subscribers. 
Sometimes, a topic is not the most appropriate way of communicating. For instance, if a mutual transaction needs to be handled between nodes, then a service is more appropriate.
A service is also defined by a string, but also by a pair of data structures. This pair of data structures defines the way of communicating by specifying the request and the response between the nodes. 

ROS already provides many different packages and functions that can be used as a black-box to perform several general tasks, such as simple robot navigation and a basic SLAM algorithm.
ROS also provides logging and playback of logs to control and test message streams. Finally, debugging, visualization and monitoring is possible to support the users.

\newpage

\subsection{Solution Layout}
The design of the solution is shown in Figure \ref{SLAMoverview}. As described in the legend, the squares are the individual nodes. These nodes represent the individual components of the entire SLAM program. While the Exploration node and the Frontier + Vantage point node are taking care of the autonomous exploration, the Mapping and Localization nodes are performing the tasks concerned with the SLAM problem. The Navigation node is taking care of the movement of the robot. It also provides a service for calculating the distances from the robot's location to several destinations and it's also in charge of initiating a frontier detection when it's necessary. 

The inter-node communication is displayed with arrows. The robot is providing its sensors' data to the SLAM nodes. These nodes then estimate a location and create a map of the current situation and distribute these topics to the Frontier Detection and the navigation algorithms. In the Frontier + Vantage Point node, the vantage points are generated and given on to the Exploration node. This node eventually decides where to move and communicates with the Navigation node, which makes the robot navigate in the environment. After that, the cycle starts over until the entire environment is fully explored and mapped. The separate nodes and how they are dealt with are explained in the following sections.

\begin{figure}[h]
\centering
\includegraphics[width=230pt]{images/SLAMOverview_cropped}
\caption{Layout of the SLAM Program}
\label{SLAMoverview}
\end{figure}



